Ana içeriğe geç

Adresin İşlemlerini Alma

Bir adrese ait işlemler Covalent Api sayesinde birkaç parametre kullanılarak elde edilebilmektedir. İşlemler elde edilirken uygun URL yapısı elde edilerek sorgu alınmakta ve anlamlandırılarak kaydedilmektedir. Yine benzer şekilde bu işlemler için başta "requests" kütüphanesi eklenmelidir.

  def İşlemleriAl(ApiAnahtarı, Zincir\_Numarası,Adres,Fiat): 

Tablo 50

Tablo 50'de görüldüğü üzere İlk olarak fonksiyon adı tanımlanır. "def" metodu ile tanımlanan fonksiyon içerisine 4 tane parametre almaktadır. Bunlar sırasıyla:

  • ApiAnahtarı: Kişiye özel kayıt olunurken oluşturulan Api anahtardır. Kişinin yaptığı işlemleri imzalaması için oluşturulmuştur.
  • Zincir_Numarası: Elde edilmek istenen verinin hangi zincire ait olduğunu ifade etmektedir. Farklı zincirlerde işlemler yaparken bu parametre Covalent tarafından belirlenen değerlere çevirerek işlem yapılabilmektedir.
  • Adres: İşlemleri alacağımız adresi ifade etmektedir. Kişinin imzası gibi kabul edilebilir. Yapılan tüm işlemler anonim olarak bu adres üzerinden gerçekleşmektedir.
  • Fiat: İşlemler içerisindeki fiyatlandırmanın hangi birim üzerinden yapılacağını ifade etmektedir.
  URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/address/" + Adres + "/transactions\_v2/" + "?quote-currency=" + Fiat + "&key=" + ApiAnahtarı 

Tablo 51

Tablo 51'de ise verilerin çekileceği http sorgusu ile karşılaşılmaktadır. Bu sorgu oluşturulurken bazı kalıp bağlantıların arasına fonksiyon parametresi olarak alınan içerik eklenmektedir. Sırasıyla ilk olarak Zincir_Numarası sonrasında Adres, Fiat ve Api anahtarını doğru düzende eklenmesi sonrasında URL yapısı oluşmakta ve sorguya hazır hale gelmektedir.

  istek = requests.get(URL) hamverim = (istek.json()) 

Tablo 52

Tablo 52'de görüldüğü üzere URL oluşturulduktan sonra requests kütüphanesinin "get" metodu sayesinde URL sorgulanır ve verisi "istek" değişkenine kaydedilir. Kaydedilen bu değişkenin altındaki kod satırı sayesinde ".json()" fonksiyonu kullanılarak json formatına çevrilerek "hamverim" değişkenine eklenir. Bu şekilde sorgusu yapılmış veri alınmış ve istenilen formata çevrilmiş olmaktadır.

  verim = hamverim["data"] 

Tablo 53

Alınan bu veri ham olarak düşünülebilir. Bu ham verinin içerisinde verinin kendisinin yanında sorgu elemanları bulunmaktadır. Sadece veri ile ilgilenildiği için şu anlık "hamverim" değişkeni içerisinden Tablo 53'de verildiği üzere "data" anahtarına erişilip yeni "verim" değişkenine kaydedilmesi sonrası için kolaylık sağlamaktadır.

  Adresim = verim["address"]
SonGüncelleme = verim["updated\_at"]
BirSonrakiGüncelleme = verim["next\_update\_at"]
ParaBirimi = verim["quote\_currency"]
ZincirId = verim["chain\_id"]

Tablo 54

Tablo 54'de kaydedilen verinin uygun anahtarlar ile erişilip istenilen değişkene kaydedilmesi gerekmektedir. Bu işlem yapılırken erişilen anahtarlara ve ilişkilendiği veri parçasına bakılacak olunursa:

  • Adresim: Sorgulanan adresi belirlemektedir. İşlemler bu adres üzerinden gerçekleşmektedir. Veri içerisinden "address" anahtarı ile erişilmektedir.
  • SonGüncelleme: Sorgulanan verinin doğrulandığı son güncelleme tarihini ifade etmektedir. Veri içerisinden "updated_at" anahtarı ile erişilmektedir.
  • BirSonrakiGüncelleme: Sorgulanan işlemlerin doğrulanması beklenen bir sonraki güncelleme tarihini ifade etmektedir. Veri içerisinden "next_update_at" anahtarı ile erişilmektedir.
  • ParaBirimi: Sorgulanan işlemlerin içerisindeki fiyatların hangi birime karşılık çevrileceğini belirtmektedir. Veri içerisinden "quote_currency" anahtarı ile erişilebilmektedir.
  • ZincirId: Sorgulanan verinin hangi blok zincir üzerinde olduğunu ifade etmektedir. Covalent tarafından oluşturulmuş Id'ler üzerinden çıktı vermektedir (Örneğin, ETH =1). Veri içerisinden "chain_id" anahtarı ile eşilebilmektedir.
  items = verim["items"] 

Tablo 55

Tablo 55'de ise veri içerisinden "items" anahtarına erişilmektedir. Şu ana kadar yaptığımız örneklerde alınan tüm veriler tüm işlemler için ortak olmaktaydı ancak bu "items" değişkeni içine liste halinde kaydedilen veri işlemden işleme farklılık göstermektedir. Bu nedenle items değişkeni içerisinde for döngüsü çalıştırılmaktadır.

  liste = [] liste.append("Adresim: " + Adresim) liste.append("Son Güncelleme: " + SonGüncelleme) liste.append("Bir sonraki Güncelleme: " + BirSonrakiGüncelleme) liste.append("Para Birimi: " + ParaBirimi) liste.append("Zincir Id: " + str(ZincirId)) 

Tablo 56

Tablo 56'da ise özel anahtarlar ile kaydedilen verilerin liste oluşturulup içerisine uygun açıklama ile eklenilmesi söz konusudur. İlk satırda "liste" adında boş bir liste tanımlanmaktadır. Tüm veriler bu listeye kaydedilecek olup sonrasında fonksiyon çıktısı olarak bu liste kaydedilecektir. Hemen altına inildiğinde "append()" fonksiyonu ile string toplama metodu kullanılarak uygun başlıkla listeye eklendiği gözlenmektedir. Ancak string toplama metodu sadece iki string içinde yapılabildiğinden dolayı öncesinde string olmayan verinin string formatına çevrilmiş olması gerekmektedir. Bu da son satırda ZincirId ile karşıya çıkmaktadır. ZincirId değişkeni integer formatında çıktı vermektedir. Bu nedenle string toplama işlemi yapamamaktadır. Toplama işlemine sokmadan önce "str()" fonksiyonunda değişkenin string olması sağlanarak toplamaya sokulabilmektedir.

  index = 1 for item in items: 

Tablo 57

Tablo 57'de görüldüğü üzere items içerisinde döngüye girmeden önce her değişkene kaydedeceğimiz değişkenleri birbirinden ayırmak için döngü değişkeni olarak "index" adında bir integer değeri kaydedilmektedir. Bu index değeri döngüler içerisinde sürekli olarak artacaktır. Bir sonraki satırda for döngüsü bulunmaktadır. Bu for döngüsü "items" adında veri içerisinden kaydettiğimiz listedeki her bir elemanı "item" adında döngü değişkeni olarak kaydedip işlemler yapmaktadır.

  BlokİmzalanmaTarihi = ["Index Numarası: "+ str(index), "Blok İmzalanma Tarihi: "+item["block\_signed\_at"]]
BlokUzunluğu = ["Index Numarası: "+ str(index), "Blok Uzunluğu: "+str(item["block\_height"])]
İşlemHashı = ["Index Numarası: " + str(index), "İşlem Hash'ı: "+item["tx\_hash"]]
İşlemBedeli = ["Index Numarası: " + str(index), "İşlem Bedeli: "+str(item["tx\_offset"])]
İşlemBaşarılıMı = ["Index Numarası: " + str(index),"İşlem Başarılı Mı: "+ str(item["successful"])]
GönderilenAdres = ["Index Numarası: " + str(index), "Gönderilen Adres: "+item["from\_address"]]
GönderildiğiAdres = ["Index Numarası: " + str(index), "Gönderildiği Adres: "+item["to\_address"]]
Değer = ["Index Numarası: " + str(index), "Değer: "+str(item["value"])]
KurDeğeri = ["Index Numarası: " + str(index), "Kur Değeri: "+ str(item["value\_quote"])]
ÖnerilenGas = ["Index Numarası: " + str(index), "Önerilen Gas: "+ str(item["gas\_offered"])]
HarcananGas = ["Index Numarası: " + str(index),"Harcanan Gas: "+ str(item["gas\_spent"])]
GazFiyatı = ["Index Numarası: " + str(index),"Gas Fiyatı: "+ str(item["gas\_price"])]
GazKuru = ["Index Numarası: " + str(index),"Gas Kuru: "+ str(item["gas\_quote"])]
GazKuruOranı = ["Index Numarası: " + str(index), "Gaz Kur Oranı: "+ str(item["gas\_quote\_rate"])]
KayıtlıLogDefteriJsonFormatında = ["Index Numarası: " + str(index),"Verim: "+ str(item["log\_events"])]

Tablo 58

Tablo 58'de asıl veriler ile karşılaşmakta da olunup döngü içerisine girilmektedir. Öncelikle veri listesinin ilk elemanı olarak uygun index numarası string formatına çevrilip string toplama metodu ile kaydedilir. Listenin ikinci elamanı ile yine string toplama ve string formatına getirme işlemleri ile istenilen spesifik parçanın uygun başlıkla eklenmesidir. Her değişkene sırasıyla bakılacak olunursa:

  • BlokİmzalanmaTarihi: İşlemin gerçekleştiği bloğun ne zaman madenciler tarafından imzalandığını ve zincire eklendiğini belirtmektedir. İtem içerisinden "block_signed_at" anahtarı ile erişilebilmektedir.
  • BlokUzunluğu: İşlemin gerçekleştiği bloğun blok zinciri içerisinde hangi sıra ile zincire eklendiğini belirtmektedir. İtem içerisinden "BlokUzunluğu" anahtarı ile erişilebilmektedir.
  • İşlemHashı: İşlemin gerçekleştiği blok zincir bloğunun zincire eklenirken ki hash'ini ifade etmektedir. İtem içerisinden "tx_hash" anahtarı ile erişilebilmektedir.
  • İşlemBedeli: İşlemin gerçekleşirken ki ücreti belirtmektedir. İtem içerisinden "tx_offset" anahtarı ile erişilebilmektedir.
  • İşlemBaşarılıMı: İşlemin başarılı olup olmadığını boolean veri tipi ile çıktı vermektedir. İşlem başarılı bir şekilde gerçekleştiyse "true" çıktısı verirken başarısızsa "false" çıktısını verir. İtem içerisinden "successful" anahtarı ile erişilebilmektedir.
  • GönderilenAdres: İşlemler dahilinde miktarın karşı tarafa gönderildiği adresi belirtmektedir. Bu adres zincirler arası farklılık göstermektedir. İtem içerisinden "from_address" anahtarı ile erişilebilmektedir.
  • GönderildiğiAdres: İşlemlerin dahilinde miktarın gönderildiği karşı tarafın adresini belirtmektedir. Miktar GönderilenAdres değişkeninden GönderildiğiAdres'e aktarılmış olmaktadır. İtem içerisinden "to_address" anahtarı ile erişilmektedir.
  • Değer: Gerçekleşen transfer işleminde transfer edilen miktarın değerini ifade etmektedir. Fiat ile çevrilmemiştir. Kontrat birimine sahip olmaktadır. İtem içerisinden "value" anahtarı ile erişilmektedir.
  • KurDeğeri: Gerçekleşen transfer işleminde transfer edilen miktarın değerini Fiat parametresi ile belirlenen kura göre istenilen birime çevrilmiş halini ifade etmektedir. İtem içerisinden "value_quote" anahtarı ile erişilmektedir.
  • ÖnerilenGas: Gerçekleşen transferin gerçekleşebilmesi için öncesinde teklif edilmiş Gas miktarını ifade etmektedir. Bu miktar kesin olarak harcanan miktar olamamak ile beraber fazla veya az sonuçlar verebilmektedir. İtem içerisinden "gas_offered" değişkeni ile erişilmektedir.
  • HarcananGas: Gerçekleşen transfer işleminin gerçekleşmesi için harcanan Gas miktarını ifade etmektedir. Birimi kontrattaki Gas birimidir. ÖnerilenGas miktarından farklılık gösterebilmektedir. İtem içerisinden "gas_spent" anahtarı ile erişilmektedir.
  • GazFiyatı: Gerçekleşen transfer işleminin gerçekleşmesi için harcanan Gas miktarının parametre olarak seçilen Fiat'a yani kur birimine göre çevrilmiş halidir. İtem "gas_price" anahtarı ile erişilmektedir.
  • GazKuruOranı: Gerçekleşen transfer işleminin gerçekleşmesi için harcanan Gas biriminin seçilen kura oranını ifade etmektedir. İtem "gas_price" anahtarı ile erişilmektedir.
  • KayıtlıLogDefteriJsonFormatında: Gerçekleşen transfer işlemleri sonrasında blok üzerinde kaydedilen log defteri kayıtlarını Json formatında çıktı vermektedir. Bloktan bloğa farklılık gösterip bazı bloklarda boş durumda olmaktadır. Çıktıyı liste olarak döndürmekte olup İtem içerisinden "log_events" parametresi ile erişilmektedir.
  liste.append(BlokİmzalanmaTarihi) liste.append(BlokUzunluğu) liste.append(İşlemHashı) liste.append(İşlemBedeli) liste.append(İşlemBaşarılıMı) liste.append(GönderilenAdres) liste.append(GönderildiğiAdres) liste.append(Değer) liste.append(KurDeğeri) liste.append(ÖnerilenGas) liste.append(HarcananGas) liste.append(GazFiyatı) liste.append(GazKuru) liste.append(GazKuruOranı) liste.append(KayıtlıLogDefteriJsonFormatında) 

Tablo 59

Tablo 59'da görüldüğü üzere istenilen anahtarlar ile veri değişkenlere kaydedildikten sonra her bir değişken "liste" içerisine ".append()" fonksiyonu ile eklenir. Bu veriler eklendikten sonra kullanıma hazır bir hal almaktadır. Liste içerisine kaydedilen ve anlamlandırılan veri görevlerde kullanıma hazırdır.

  index += 1 

Tablo 60

Tablo 60'da ise index değeri bir arttırılarak döngüden çıkılmış olunmaktadır. Bir arttırılan döngü değişkeni sayesinde yeni veriler farklı sıra ile aynı liste içerisine kaydedilebilir hale gelmektedir.

  for i in liste: print(i) 

Tablo 61

Veri kullanıma hazır olmaktadır. Bu veri kısa bir for döngüsü ile Tablo 61'de ekrana yazdırılır ve analize hazır hale gelir.

  return liste 

Tablo 62

Tablo 62'de görüldüğü üzere fonksiyon sonunda "return" metodu ile liste fonksiyon çıktısı olarak döndürülmektedir. Bu çıktının uygun indexleme işlemleri ile istenilen parçasına ulaşılabilir.

  def İşlemleriAl(ApiAnahtarı, Zincir\_Numarası,Adres,Fiat): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/address/" + Adres + "/transactions\_v2/" + "?quote-currency=" + Fiat + "&key=" + ApiAnahtarı istek = requests.get(URL) verim = (istek.json()) verim = verim["data"] Adresim = verim["address"] SonGüncelleme = verim["updated\_at"] BirSonrakiGüncelleme = verim["next\_update\_at"] ParaBirimi = verim["quote\_currency"] ZincirId = verim["chain\_id"] items = verim["items"] liste = [] liste.append("Adresim: " + Adresim) liste.append("Son Güncelleme: " + SonGüncelleme) liste.append("Bir sonraki Güncelleme: " + BirSonrakiGüncelleme) liste.append("Para Birimi: " + ParaBirimi) liste.append("Zincir Id: " + str(ZincirId)) index = 1 for item in items: BlokİmzalanmaTarihi = ["Index Numarası: "+ str(index), "Blok İmzalanma Tarihi: "+item["block\_signed\_at"]] BlokUzunluğu = ["Index Numarası: "+ str(index), "Blok Uzunluğu: "+str(item["block\_height"])] İşlemHashı = ["Index Numarası: " + str(index), "İşlem Hash'ı: "+item["tx\_hash"]] İşlemBedeli = ["Index Numarası: " + str(index), "İşlem Bedeli: "+str(item["tx\_offset"])] İşlemBaşarılıMı = ["Index Numarası: " + str(index),"İşlem Başarılı Mı: "+ str(item["successful"])] GönderilenAdres = ["Index Numarası: " + str(index), "Gönderilen Adres: "+item["from\_address"]] GönderildiğiAdres = ["Index Numarası: " + str(index), "Gönderildiği Adres: "+item["to\_address"]] Değer = ["Index Numarası: " + str(index), "Değer: "+str(item["value"])] KurDeğeri = ["Index Numarası: " + str(index), "Kur Değeri: "+ str(item["value\_quote"])] ÖnerilenGas = ["Index Numarası: " + str(index), "Önerilen Gas: "+ str(item["gas\_offered"])] HarcananGas = ["Index Numarası: " + str(index),"Harcanan Gas: "+ str(item["gas\_spent"])] GazFiyatı = ["Index Numarası: " + str(index),"Gas Fiyatı: "+ str(item["gas\_price"])] GazKuru = ["Index Numarası: " + str(index),"Gas Kuru: "+ str(item["gas\_quote"])] GazKuruOranı = ["Index Numarası: " + str(index), "Gaz Kur Oranı: "+ str(item["gas\_quote\_rate"])] KayıtlıLogDefteriJsonFormatında = ["Index Numarası: " + str(index),"Verim: "+ str(item["log\_events"])] liste.append(BlokİmzalanmaTarihi) liste.append(BlokUzunluğu) liste.append(İşlemHashı) liste.append(İşlemBedeli) liste.append(İşlemBaşarılıMı) liste.append(GönderilenAdres) liste.append(GönderildiğiAdres) liste.append(Değer) liste.append(KurDeğeri) liste.append(ÖnerilenGas) liste.append(HarcananGas) liste.append(GazFiyatı) liste.append(GazKuru) liste.append(GazKuruOranı) liste.append(KayıtlıLogDefteriJsonFormatında) liste.append("") index += 1 for i in liste: print(i) return liste 

Tablo 63

Tablo 63'de kodun tamamı ifade edilmiştir. Yapılan işlemlere sırası ile bakılacak olunursa öncelikle fonksiyon parametresi olarak girilen değerler ile URL yapısı oluşturulur ve eklenen kütüphane ile sorgusu yapılarak veri ham bir halde kaydedilir. Sonrasında her işlem için aynı olan değerler uygun anahtar ile erişilerek listeye eklenir. Devamında her işlem için ayrı olan değerler for döngüsü içerisinde item değişkeni ve index ataması ile uygun başlıklar ile değişkene atanarak listeye eklenir. İndex arttırılır ve döngü başına gelinir. Her işlem kaydedildikten sonra tüm işlemler for döngüsü yardımıyla ekrana yazdırılır. Son olarak da fonksiyon çıktısı olarak "liste" değişkeni döndürülür ve fonksiyon tamamlanır.

 
['Index Numarası: 7', 'Blok İmzalanma Tarihi: 2021-07-21T15:22:17Z'] ['Index Numarası: 7', 'Blok Uzunluğu: 12870552'] ['Index Numarası: 7', "İşlem Hash'ı: 0x3b9de831fb36c77ea7c32ee6477c2c6624aebe23d1b90c1af41392c47a42a01f"] ['Index Numarası: 7', 'İşlem Bedeli: 216'] ['Index Numarası: 7', 'İşlem Başarılı Mı: True'] ['Index Numarası: 7', 'Gönderilen Adres: 0xcfccf1b761589fe262d9607ad257fc1e30bc3965'] ['Index Numarası: 7', 'Gönderildiği Adres: 0xa7d17eac0d86a86665505ebd97c64376984bfbd7'] ['Index Numarası: 7', 'Değer: 25723737350352157'] ['Index Numarası: 7', 'Kur Değeri: 442.59674657424125'] ['Index Numarası: 7', 'Önerilen Gas: 21000'] ['Index Numarası: 7', 'Harcanan Gas: 21000'] ['Index Numarası: 7', 'Gas Fiyatı: 28600000000'] ['Index Numarası: 7', 'Gas Kuru: 10.333786353515624'] ['Index Numarası: 7', 'Gaz Kur Oranı: 17205.771484375'] ['Index Numarası: 7', 'Verim: []']
['Index Numarası: 8', 'Blok İmzalanma Tarihi: 2021-07-17T14:38:01Z'] ['Index Numarası: 8', 'Blok Uzunluğu: 12844803'] ['Index Numarası: 8', "İşlem Hash'ı: 0x0a5a6396a117d96b44e012358bf844969ca67c2e799ac00e0d2dccfd8e6dd754"] ['Index Numarası: 8', 'İşlem Bedeli: 90'] ['Index Numarası: 8', 'İşlem Başarılı Mı: False'] ['Index Numarası: 8', 'Gönderilen Adres: 0xa7d17eac0d86a86665505ebd97c64376984bfbd7'] ['Index Numarası: 8', 'Gönderildiği Adres: 0x94235659cf8b805b2c658f9ea2d6d6ddbb17c8d7'] ['Index Numarası: 8', 'Değer: 0'] ['Index Numarası: 8', 'Kur Değeri: 0.0'] ['Index Numarası: 8', 'Önerilen Gas: 173315'] ['Index Numarası: 8', 'Harcanan Gas: 173266'] ['Index Numarası: 8', 'Gas Fiyatı: 25000000000'] ['Index Numarası: 8', 'Gas Kuru: 70.24275552158204'] ['Index Numarası: 8', 'Gaz Kur Oranı: 16216.166015625'] ['Index Numarası: 8', 'Verim: []']

Tablo 64

Tablo 64'de örnek bir fonksiyon çıktısı gösterilmektedir.